GitHub Actions でリストを含む JSON ファイルを作成する

GitHub Actions でリストを含む JSON ファイルを作成する

Clock Icon2024.07.28

こんにちは、製造ビジネステクノロジー部の若槻です。

今回は、GitHub Actionsリストを含む JSON ファイルを作成する処理を実装する機会があったので、使用したスクリプトおよび試行錯誤内容を共有します。

確認してみた

はじめに結論

結論としては、次のようなスクリプトでリストを含む JSON ファイルを作成できました。

配列が含まれる JSON ファイルを新規作成する場合

配列が含まれる JSON ファイルを jq コマンドを使って新規作成する場合は、以下のようなスクリプトになります。

# orgs フィールドに配列が含まれる JSON ファイルを新規作成
echo -e '{"orgs": ["組織A", "組織B"]}' | jq > sample1.json

次のような JSON ファイルが作成されます。

cat sample1.json
{
  "orgs": [
    "組織A",
    "組織B"
  ]
}

既存の JSON ファイルに配列を含むフィールドを追加する場合

配列を含むフィールドを既存の JSON ファイルに jq コマンドを使って追加する場合は、以下のようなスクリプトになります。

# user フィールドが追加された既存の JSON ファイルに orgs フィールドを追加
jq --raw-output '{"user": .user, "orgs": ["組織C", "組織D"]}' sample2.json > tmp.json
mv tmp.json sample2.json

次のような JSON ファイルが作成されます。

cat sample
{
  "user": "hoge",
  "orgs": [
    "組織C",
    "組織D"
  ]
}

GitHub Actions で動作確認

先ほどのコマンドを GitHub Actions ワークフロー上で使用して動作確認してみます。

.github/workflows/manual-test.yml
name: Add JSON file test

on: workflow_dispatch

jobs:
  create_json:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      # sample1: 配列を含む新規の JSON ファイルを新規作成
      - name: Create sample1.json
        run: |
          echo -e '{"orgs": ["組織A", "組織B"]}' | jq > sample1.json

      # sample1: 作成した JSON ファイルを確認
      - name: sample1.json output
        run: cat sample1.json

      # sample2: 既存のフィールドを持つ JSON ファイルを作成
      - name: Create sample2.json
        run: |
          echo -e '{ "user": "hoge" }' | jq > sample2.json

      # sample2: 既存の JSON ファイルの orgs フィールドを配列で更新
      - name: Update orgs sample2.json
        run: |
          jq --raw-output '{"user": .user, "orgs": ["組織C", "組織D"]}' sample2.json > tmp.json
          mv tmp.json sample2.json

      # sample2: 作成した JSON ファイルを確認
      - name: sample2.json output
        run: cat sample2.json

期待通りに JSON ファイルが作成されました。良さそうですね。

試行錯誤

jossef/action-set-json-field アクションを使った場合、配列が文字列として出力される

jossef/action-set-json-field アクションを使うと、GitHub Actions で JSON ファイルへのフィールドの更新を簡単な記述で実装することができます。

https://github.com/jossef/action-set-json-field

当初はこのアクションを下記のように使おうとしました。

# 中略
- name: Update orgs config.json
  uses: jossef/action-set-json-field@v2.2
  with:
    file: sample.json
    field: orgs
    value: '["組織A","組織B"]'

しかし次のように配列が文字列として出力されてしまいました。

sample.json
{
  "orgs": "[\"組織A\",\"組織B\"]"
}

このように jossef/action-set-json-field アクションではフィールドの値によっては対応できない場合があるので注意が必要です。

--raw-output オプションを使わない場合、配列が文字列として出力される

jq コマンドの --raw-output オプションは -r とも記載でき、jq による変換結果を RAW 出力させることができ、冒頭のスクリプトでも使用しています。

https://jqlang.github.io/jq/manual/

よって --raw-output オプションを使わない場合は、前項の試行錯誤と同様に、次のように配列が文字列として出力されてしまいます。

{
  "orgs": "[\"組織A\",\"組織B\"]"
}

オプションの付け忘れが無いように注意しましょう。

おわりに

GitHub Actions ででリストを含む JSON ファイルを作成する処理を実装する機会があったので、使用したスクリプトおよび試行錯誤内容を共有します。

GitHub で何らかのコンフィグファイルを管理するために JSON ファイルの作成や更新を GitHub Actions で効率化したい場面は多いと思うので、そのような場合に参考にしてみてください。

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.